// 目标：集成vuex
// 1. 下包
// 2. 导包
// 3. 注册
// 4. 创建store实例/对象
// 5. 导出
import Vue from 'vue'
import Vuex from 'vuex'
// Vue.use(VueRouter)
Vue.use(Vuex)//  给组件添加一个$store对象
const store = new Vuex.Store({
  // 开启vuex的严格模式，今后修改state必须通过mutations，否则就会报错
  strict: true,
  // 定义共享的数据源
  state: {
    // 变量名: 初始值
    num: 100,
    name: '杜兰特',
    age: 18,
  },
  // 定义mutations -> 唯一、同步修改 state
  mutations: {
    // 增加库存
    addNum (state, val = 1) {
      state.num += val
    },
    // 减少库存
    subNum (state, val = 1) {
      state.num -= val
    },
    // 设置库存
    setNum (state, val) {
      state.num = val
    }
  },
  // 定义actions -> 书写异步代码 -> 最终必须提交到指定的mutation方可完成state的修改
  actions: {
    asyncAddNum (store, val = 1) {
      setTimeout(() => {
        store.commit('addNum', val)
      }, 2000)
    },
    asyncSubNum (store, val = 1) {
      setTimeout(() => {
        store.commit('subNum', val)
      }, 2000)
    }
  }
})
export default store